上篇介紹了如何將檔案 Push 到 GitHub 後,今天就來練習如何從 GitHub 下載檔案吧!
這些技巧都很適合也蠻常用在團隊合作的時候喔!
先看一下官方文件是如何說明 git pull 指令的。
👉 git-pull - Fetch from and integrate with another repository or a local branch
解釋:git pull
runs git fetch
with the given parameters and calls git merge
to merge the retrieved branch heads into the current branch.
從上述的說明來看,我們可以知道其實 git pull
指令就是由 git fetch
將檔案從遠端抓取下來,並使用 git fetch
指令將最新進度加到當前的分支。
因此我們可以記得:
👉 git pull
= git fetch
+ git fetch
總結|Pull 指令是去上限抓東西下來(Fetch),並更新本機的進度(Merge)
git fetch
假使遠端的數據庫有了新的 Commit 版本,需要將這些更新取回本地端,此時使用此指令。
$ git fetch [遠端節點名稱]
範例: git fetch origin
預設情況下,git fecth
會將所有有更新的分支取回,如有想指定特定的分支,也可以執行以下指令:
$ git fetch [遠端節點名稱] [分支名]
使用 git fecth
抓下來的更新,如果要在本地端讀取的話,需要使用「遠端節點名稱 / 分支名」的格式讀取。
例如:遠端的節點名稱為 origin
、分支為 master
,今天要將抓下來的分支合併到當前進度,那麼應該透過以下指令才有辦法讀取到最新進度:
$ git merge oringin/master
「遠端節點名稱 / 分支名」- oringin/master
💡 補充|查看分支指令 git branch
搭配各種參數
如果想知道我們抓取下來的遠端分支,可以使用 -r
參數查看。
$ git branch -r # 檢視遠端分支
-a
參數則可以查看所有分支。
$ git branch -a # 檢視所有分支
上述除了使用 merge 來合併之外,也可使用 Rebase
指令來合併。
加上
--rebase
參數
$ git pull --rebase #使用 rebase 模式合併抓取檔案
Rebase 的優點在於不會產生額外的 Commit 來紀錄合併這個動作。
通常會發生衝突的原因在於,目前遠端分支上的 Commit 版本,比你本地端來的新,如此一來會判別本地端的版本較舊就會推不上去。
範例:
生命魔法團隊是由
四個人組成。
今天我們要一起做一個專案,共同在 GitHub 一起用了一個數據庫。
--
情境:
龜人團長與艾草阿妲瑪兩人差不多同時在 GitHub 上下載了一份檔案準備進行開發。因為龜人團長動作比較快寫好專案了,因此已經先 Push 到 GitHub 上。結果後來艾草阿妲瑪終於完成他負責的部分,準備要上傳到 GitHub 的時候 ....
「咦!?Why~~為何推不上去」艾草阿妲瑪崩潰的想、砸鍵盤。
--
方法一|先拉再推
看到崩潰的艾草阿妲瑪,娜奴烙詩查看情況,才發現原來是發生了「git pull 衝突」。
於是乎,娜奴烙詩找到了解決辦法告訴艾草阿妲瑪:
「艾草~~不用擔心啦~~讓我來告訴你怎麼解決吧!」
「你可以使用先拉再推的方式」
「再一次執行將遠端的資料拉下來,這樣龜人團長上傳的進度也會加到你的本地端,解決你比較舊的問題,這時候你就可以再把你的專案推出去了」
💡 執行程式碼:
$ git pull --rebase
--rebase
參數表示「內容抓下來之後請使用 Rebase 方式合併。
方法二|誰管你先,就要按照我的來!
在遠方的希爾芙Chuyin看到艾草阿妲瑪和娜奴烙詩兩人待在一起討論,忍不住好奇心也跑過來看。了解大致情況後,希爾芙Chuyin也告訴艾草阿妲瑪說他也有個辦法,不過還是不推薦啦!畢竟有點可怕(希爾芙Chuyin 的魔力控制的比較不好QQ...)
「你可以不要理會規則呀!直接使用 -f
參數,告訴 Git 強制將你的檔案推上去,這樣你就可以順利將檔案推上去啦!不過....這也會把龜人團長上傳的檔案給覆蓋掉啦....如果你們兩個不會爭執就好....」
💡 執行程式碼:
$ git push -f
$ git push -force
-f
參數或-force
參數都可以使用。
--
艾草阿妲瑪聽到原來有這些方法後,心情很開心,她最後選擇了第一個方法,也才避免魔法界可能發生的腥風血雨戰爭,守護和平是當前重要的事。
補充說明 |git push -f
指令
此指令的好處是在於它可以無視規則,你想推就推,但也因為這樣,容易導致專案管理的難處。
因此使用這指令時要非常小心,要知道自己在做什麼。
使用時機:
--
為了魔法世界的和平,還是要好好跟其他組員溝通啦!
如果真的被蓋掉了,那就請之前前一個進度的組員,再一次將正確的進度強迫推上去就可以了!